home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 020 / modula.arc / M2FORMAT.MOD < prev    next >
Encoding:
Text File  |  1986-08-20  |  4.0 KB  |  327 lines

  1. (*
  2.  
  3. John Tal
  4. Rollins
  5. (313) 423-7200
  6.                *)
  7.  
  8. (* ---- *)
  9. MODULE M2Format;
  10.  
  11.  
  12.  
  13. (*    Formats Pascal (? or Modula-2) programs from multi-statement lines
  14.  
  15.       to single statement lines.   Found to be very useful in converting
  16.  
  17.       Turbo Pascal programs into Modula-2.
  18.  
  19.  
  20.  
  21.       06/10/86   John Tal
  22.  
  23.                  Rollins Medical/Dental Systems
  24.  
  25.                  Southfield, MI
  26.  
  27. *)
  28.  
  29.  
  30.  
  31. FROM FileSystem IMPORT Response,File;
  32.  
  33. FROM InOut      IMPORT Done,EOL,in,out,
  34.  
  35.                        OpenInput,OpenOutput,CloseInput,CloseOutput,
  36.  
  37.                        Read,ReadString,Write,WriteString,WriteLn;
  38.  
  39. FROM Strings    IMPORT Copy,Pos;
  40.  
  41.  
  42.  
  43. IMPORT ASCII;
  44.  
  45. IMPORT Terminal;
  46.  
  47.  
  48.  
  49.  
  50.  
  51. TYPE
  52.  
  53.   STRING = ARRAY [0..255] OF CHAR;
  54.  
  55.  
  56.  
  57. VAR
  58.  
  59.   newline,line,curLine:STRING;
  60.  
  61.   EndFile: BOOLEAN;
  62.  
  63.   infile,outfile,tempStr: STRING;
  64.  
  65.   blanks:CARDINAL;
  66.  
  67.  
  68.  
  69. PROCEDURE ReadLine(VAR Str: ARRAY OF CHAR);
  70.  
  71. VAR
  72.  
  73.   i: CARDINAL;
  74.  
  75.   ch: CHAR;
  76.  
  77. BEGIN
  78.  
  79.   i := 0;
  80.  
  81.   ch := ' ';
  82.  
  83.   Read(ch);
  84.  
  85.   LOOP
  86.  
  87.     IF (ch = ASCII.EOL) OR (ch = ASCII.sub) THEN EXIT; END;
  88.  
  89.     Str[i] := ch;
  90.  
  91.     INC(i);
  92.  
  93.     IF i = 255 THEN EXIT; END;
  94.  
  95.     Read(ch);
  96.  
  97.   END;
  98.  
  99.   Str[i] := CHR(0);
  100.  
  101.   IF (ch = ASCII.sub) OR (ch = ASCII.nul) THEN  in.eof := TRUE;  END;
  102.  
  103. END ReadLine;
  104.  
  105.  
  106.  
  107.  
  108.  
  109. PROCEDURE FindBlank(VAR curLine: ARRAY OF CHAR; VAR blanks: CARDINAL);
  110.  
  111. BEGIN
  112.  
  113.   blanks := 0;
  114.  
  115.   WHILE curLine[blanks] = ' ' DO
  116.  
  117.     INC(blanks);
  118.  
  119.   END;
  120.  
  121. END FindBlank;
  122.  
  123.  
  124.  
  125. PROCEDURE SplitLine(VAR curLine: ARRAY OF CHAR; blanks: CARDINAL);
  126.  
  127. VAR
  128.  
  129.   semi: ARRAY[0..1] OF CHAR;
  130.  
  131.   holdLine,tempStr,temp2Str: ARRAY[0..255] OF CHAR;
  132.  
  133.   a: CARDINAL;
  134.  
  135. BEGIN
  136.  
  137.   semi[0] := ';';
  138.  
  139.   semi[1] := CHR(0);
  140.  
  141.   a := Pos(semi,curLine);
  142.  
  143.   IF a < HIGH(curLine) THEN
  144.  
  145.      WHILE a < HIGH(curLine) DO
  146.  
  147.         Copy(curLine,0,a+1,tempStr);
  148.  
  149.         WriteString(tempStr);
  150.  
  151.         WriteLn;
  152.  
  153.         Copy(curLine,a+1,HIGH(curLine),holdLine);
  154.  
  155.         IF blanks > 0 THEN
  156.  
  157.            ToSpaces(temp2Str,blanks-1);
  158.  
  159.         ELSE
  160.  
  161.            temp2Str := "";
  162.  
  163.         END;
  164.  
  165.         Concat(temp2Str,holdLine,curLine);
  166.  
  167.         (* to maintain indentation *)
  168.  
  169.         a := Pos(semi,curLine);
  170.  
  171.      END;
  172.  
  173.   ELSE
  174.  
  175.      WriteString(curLine);
  176.  
  177.      WriteLn;
  178.  
  179.   END;
  180.  
  181. END SplitLine;
  182.  
  183.  
  184.  
  185.  
  186.  
  187. PROCEDURE Length(VAR source:ARRAY OF CHAR):CARDINAL;
  188.  
  189. VAR
  190.  
  191.  i:CARDINAL;
  192.  
  193.  ch:CHAR;
  194.  
  195. BEGIN
  196.  
  197.   i:=0;
  198.  
  199.   ch := source[i];
  200.  
  201.   WHILE (ch <> CHR(0)) AND (i < HIGH(source)) DO
  202.  
  203.     INC(i);
  204.  
  205.     ch := source[i];
  206.  
  207.   END;
  208.  
  209.   RETURN i;
  210.  
  211. END Length;
  212.  
  213.  
  214.  
  215. PROCEDURE Concat(VAR s1,s2:ARRAY OF CHAR;VAR result:ARRAY OF CHAR);
  216.  
  217. VAR
  218.  
  219.   i,j:CARDINAL;
  220.  
  221. BEGIN
  222.  
  223.   j:= Length(s1);
  224.  
  225.   FOR i:= 0 TO j DO
  226.  
  227.     result[i] := s1[i];
  228.  
  229.   END;
  230.  
  231.   FOR i := 0 TO Length(s2) DO
  232.  
  233.     result[i+j] := s2[i];
  234.  
  235.   END;
  236.  
  237. END Concat;
  238.  
  239.  
  240.  
  241. PROCEDURE ToSpaces(VAR dest : ARRAY OF CHAR; i : CARDINAL);
  242.  
  243. VAR
  244.  
  245.  q : CARDINAL;
  246.  
  247. BEGIN
  248.  
  249.  IF i > 0 THEN
  250.  
  251.    FOR q:=0 TO i-1 DO
  252.  
  253.      dest[q]:=' ';
  254.  
  255.    END;
  256.  
  257.    dest[i]:=CHR(0);
  258.  
  259.  ELSE
  260.  
  261.    dest[0]:=CHR(0);
  262.  
  263.  END;
  264.  
  265. END ToSpaces;
  266.  
  267.  
  268.  
  269. BEGIN
  270.  
  271.   Terminal.WriteLn;
  272.  
  273.   Terminal.WriteString('M2Format - Formats Structured Programs to 1 statement per line.');
  274.  
  275.   Terminal.WriteLn;
  276.  
  277.   Terminal.WriteString('---------------------------------------------------------------');
  278.  
  279.   Terminal.WriteLn;
  280.  
  281.   Terminal.WriteLn;
  282.  
  283.   Terminal.WriteString('M2Format    ');
  284.  
  285.   OpenInput("PAS");
  286.  
  287.   IF Done THEN
  288.  
  289.      Terminal.WriteString('M2Format   ');
  290.  
  291.      OpenOutput("MOD");
  292.  
  293.      Terminal.WriteLn;
  294.  
  295.      Terminal.WriteString('Processing...');
  296.  
  297.      Terminal.WriteLn;
  298.  
  299.      WHILE NOT in.eof DO
  300.  
  301.        ReadLine(curLine);
  302.  
  303.        FindBlank(curLine,blanks);
  304.  
  305.        SplitLine(curLine,blanks);
  306.  
  307.      END;
  308.  
  309.      CloseInput;
  310.  
  311.      CloseOutput;
  312.  
  313.      Terminal.WriteString('Done!');
  314.  
  315.      Terminal.WriteLn;
  316.  
  317.   ELSE
  318.  
  319.      Terminal.WriteString('Error opening file.');
  320.  
  321.      Terminal.WriteLn;
  322.  
  323.   END;
  324.  
  325. END M2Format.
  326.  
  327.